#ifndef NETWORKMANAGER_H
#define NETWORKMANAGER_H


#include <Arduino.h>
#include <LittleFS.h>
#include <WiFi.h>

#include "../shared_values.h"
#define UMEKO_FS LittleFS

// 读取WiFi名称和密码并尝试连接WiFi
bool wifi_initalize_from_file(){
  static String ssid;
  static String password;
  if (!UMEKO_FS.begin(true)) {
      Serial.println("[UMEKO][FS] FS Mount Failed");
      return false;
  } else {
    Serial.println("[UMEKO][FS] FS Mount Successful");
  }
  if (UMEKO_FS.exists("/wifi.txt")) {
    Serial.println("[UMEKO][FS] wifi.txt文件存在");
    fs::File wifiFile = UMEKO_FS.open("/wifi.txt", "r");
    ssid = wifiFile.readStringUntil('\n');
    password = wifiFile.readStringUntil('\n');
    ssid.trim();
    password.trim();
    wifiFile.close();
    WiFi.begin(ssid.c_str(), password.c_str());    // 连接WiFi网络
    Serial.printf("[UMEKO][NETWORK] 正在连接WiFi \"%s\" 密码 \"%s\"\n", ssid.c_str(), password.c_str());
    unsigned long startAttemptTime = millis(); // 记录开始尝试连接的时间
    while (millis() - startAttemptTime < 3000) { // 等待WiFi连接成功或超时
      if (WiFi.status() != WL_CONNECTED){
        Serial.printf("[UMEKO][NETWORK] 正在连接WiFi \"%s\" 密码 \"%s\"\n", ssid.c_str(), password.c_str());
        delay(1000);
      } else {
        Serial.println("[UMEKO][NETWORK] WiFi连接成功");
        global_ssid = ssid.c_str();
        global_password = password.c_str();
        return true;
      }
    }
    Serial.println("[UMEKO][NETWORK] WiFi连接超时");
    return false;
  } else {
    Serial.println("[UMEKO][FS] wifi.txt文件不存在");
    return false;
  }
}

void wifi_save_to_file(const char* newSSID, const char* newPassword){
    if (!newSSID || !newPassword) {
        Serial.println("[UMEKO][FS] SSID或密码为空，无法保存");
        return;
    }
    fs::File wifiFile = UMEKO_FS.open("/wifi.txt", "w");
    if (!wifiFile) {
        Serial.println("[UMEKO][FS] 无法打开wifi.txt文件进行写入");
        return;
    }
    wifiFile.println(newSSID);
    wifiFile.println(newPassword);
    wifiFile.close();
    global_ssid = strdup(newSSID); // 更新全局SSID
    global_password = strdup(newPassword); // 更新全局密码
    Serial.printf("[UMEKO][FS] WiFi信息已保存: SSID: %s, 密码: %s\n", global_ssid, global_password);
}

// 查询wifi.txt中的内容
void wifi_query_file() {
    if (UMEKO_FS.exists("/wifi.txt")) {
        fs::File wifiFile = UMEKO_FS.open("/wifi.txt", "r");
        if (!wifiFile) {
            Serial.println("[UMEKO][FS] 无法打开wifi.txt文件进行读取");
            return;
        }
        String ssid = wifiFile.readStringUntil('\n');
        String password = wifiFile.readStringUntil('\n');
        ssid.trim();
        password.trim();
        wifiFile.close();
        Serial.printf("[UMEKO][FS] WiFi文件内容: SSID: %s, 密码: %s\n", ssid.c_str(), password.c_str());
        if (WiFi.status() == WL_CONNECTED){
          long rssi = WiFi.RSSI(); 
          Serial.print("[UMEKO][NETWORK] WiFi Signal Strength (RSSI): "); 
          Serial.print(rssi); 
          Serial.println(" dBm"); 
        }else{
          Serial.println("[UMEKO][NETWORK] WiFi未连接");
        }

    } else {
        Serial.println("[UMEKO][FS] wifi.txt文件不存在");
    }
}

// 删除wifi.txt文件
void wifi_reset_file() {
    if (UMEKO_FS.exists("/wifi.txt")) {
        UMEKO_FS.remove("/wifi.txt");
        Serial.println("[UMEKO][FS] wifi.txt文件已删除");
    } else {
        Serial.println("[UMEKO][FS] wifi.txt文件不存在");
    }
}

void wifi_start_hotspot(const char* ssid, const char* password) {
    WiFi.softAP(ssid, password); // 启动热点
    IPAddress IP = WiFi.softAPIP(); // 获取热点IP地址
    Serial.printf("[UMEKO][NETWORK] 热点已启动，SSID: %s, 密码: %s, IP地址: %s\n", ssid, password, IP.toString().c_str());
}



#endif // NETWORKMANAGER_H